Appearance
洛谷 P15245 · 难度 NOI/NOI+/CTSC
背景
3s 1G
在洛谷上提交时,请使用不低于 C++17 的语言版本,并且无需添加 binary.h 头文件。
题目描述
小 H 在学习二进制运算的过程中遇到了一个经典问题:给定一个初始为
基于这个问题,小 H 提出了以下问题:给定两个正整数
- 将
乘 ,即 ; - 将
乘 ,即 ; - 将
加 ,即 ; - 将
加 ,即 。
小 H 想知道最少需要多少次操作,才能使得
【实现细节】
选手不需要,也不应该实现 main 函数。
选手需要确保提交的程序包含头文件 binary.h,即在程序开头加入以下代码:
cpp
#include "binary.h"选手需要在提交的程序源文件 binary.cpp 中实现以下两个函数:
cpp
void init(int c, int t);分别表示测试点编号与测试数据组数。 表示该测试点为样例。 - 对于每个测试点,该函数会在程序开始运行时被交互库调用恰好一次。
cpp
long long binary(long long x, long long y);表示给定的两个数。 - 该函数需要返回操作次数的最小值。
- 对于每个测试点,该函数会被交互库调用恰好
次。
注意:在任何情况下,交互库运行所需时间均不会超过
【测试程序方式】
试题目录下的 grader.cpp 是交互库参考实现,最终测试时所用的交互库实现与该参考实现有所不同,因此选手的解法不应该依赖交互库实现。
选手可以在本题目下使用如下命令编译得到可执行程序:
cpp
g++ grader.cpp binary.cpp -o binary -O2 -std=c++14 -static输入格式
对于编译得到的可执行程序:
- 可执行文件将从标准输入读入以下格式的数据:
- 输入的第一行包含两个非负整数
,分别表示测试点编号和测试数据组数。 - 接下来依次为每组测试数据,对于每组测试数据:
- 第一行包含两个正整数
,表示给定的两个数。
- 第一行包含两个正整数
- 输入的第一行包含两个非负整数
输出格式
- 可执行文件将输出以下格式的数据至标准输出:
- 对于每组测试数据,输出一行一个整数,表示操作次数的最小值。
说明/提示
【下发文件说明】
在本试题目录下:
grader.cpp是提供的交互库参考实现。binary.h是头文件,选手不用关心具体内容。template_binary.cpp是提供的示例代码,选手可参考并实现自己的代码。
选手注意对所有下发文件做好备份。最终评测时只测试本试题目录下的 binary.cpp,对该程序以外文件的修改不会影响评测结果。
【数据范围】
对于所有测试数据,均有:
; 。
::cute-table
| 测试点编号 | 特殊性质 | ||
|---|---|---|---|
| 无 | |||
| B | |||
| ^ | ^ | 无 | |
| B | |||
| ^ | ^ | 无 | |
| A | |||
| ^ | ^ | 无 | |
| ^ | A | ||
| ^ | ^ | B | |
| ^ | ^ | 无 | |
| ^ | B | ||
| ^ | ^ | 无 | |
| ^ | ^ | ||
| ^ | ^ |
- 特殊性质 A:
。 - 特殊性质 B:存在
与 满足 。
【评分方式】
注意:
- 选手不应当通过非法方式获取交互库的内部信息,如直接与标准输入、输出流进行交互。此类行为将被视为作弊;
- 最终的评测交互库与样例交互库的实现不同。
本题首先会受到和传统题相同的限制,例如编译错误会导致整道题目得
在上述条件基础上:
- 对于每个测试点,程序得到满分当且仅当每次调用
binary函数时返回的答案均正确。
样例
样例 1
输入
text
0 5
1 2
1 5
3 6
7 33
5 9输出
text
1
3
1
4
2